package com.hkts.naturalgas.updatetemperature.service.serviceimpl;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.hkts.naturalgas.updatetemperature.entity.HktsUpdateTemperature;
import com.hkts.naturalgas.updatetemperature.mapper.HktsUpdateTemperatureMapper;
import com.hkts.naturalgas.updatetemperature.service.IHktsUpdateTemperatureService;
import com.hkts.naturalgas.utils.SnowFlakeUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.time.LocalDateTime;
import java.util.List;
import java.util.Map;
import java.util.function.Function;
import java.util.stream.Collectors;

/**
 * <p>
 * 服务实现类
 * </p>
 *
 * @author zy
 * @since 2022-05-20
 */
@Service
@Transactional
public class HktsUpdateTemperatureServiceImpl extends ServiceImpl<HktsUpdateTemperatureMapper, HktsUpdateTemperature> implements IHktsUpdateTemperatureService {


    @Autowired
    private HktsUpdateTemperatureMapper hktsUpdateTemperatureMapper;

    @Override
    public IPage<HktsUpdateTemperature> selectPage(Page<HktsUpdateTemperature> page, HktsUpdateTemperature hktsUpdateTemperature) {

        QueryWrapper<HktsUpdateTemperature> query = Wrappers.query();
        QueryWrapper<HktsUpdateTemperature> entityWrapper = getEntityWrapper(query, hktsUpdateTemperature);
        return hktsUpdateTemperatureMapper.selectPage(page, entityWrapper);
    }

    @Override
    public List<HktsUpdateTemperature> selectList(HktsUpdateTemperature hktsUpdateTemperature) {
        QueryWrapper<HktsUpdateTemperature> query = Wrappers.query();
        QueryWrapper<HktsUpdateTemperature> entityWrapper = getEntityWrapper(query, hktsUpdateTemperature);
        return hktsUpdateTemperatureMapper.selectList(entityWrapper);
    }

    @Override
    public void hktsUpdateTemperatureSave(HktsUpdateTemperature hktsUpdateTemperature) {
        QueryWrapper<HktsUpdateTemperature> query = Wrappers.query();
        query.lambda().eq(HktsUpdateTemperature::getWorkShopId, hktsUpdateTemperature.getWorkShopId());
        query.lambda().eq(HktsUpdateTemperature::getFlameSystem, hktsUpdateTemperature.getFlameSystem());
        hktsUpdateTemperature.setUpdateStatus(1);
        HktsUpdateTemperature temperature = hktsUpdateTemperatureMapper.selectOne(query);
        if (temperature == null) {
            hktsUpdateTemperature.setId(String.valueOf(SnowFlakeUtil.getFlowIdInstance().nextId()));
            hktsUpdateTemperature.setUpdateTime(LocalDateTime.now());
            this.saveOrUpdate(hktsUpdateTemperature);
        } else {
            temperature.setSmokeTemperature(hktsUpdateTemperature.getSmokeTemperature());
            temperature.setBurnTemperature(hktsUpdateTemperature.getBurnTemperature());
            temperature.setUpdateTime(LocalDateTime.now());
            temperature.setUpdateStatus(hktsUpdateTemperature.getUpdateStatus());
            this.saveOrUpdate(temperature);
        }
    }
    @Override
    public Map<String,HktsUpdateTemperature> selectUpdateStatusTemperature() {
        QueryWrapper<HktsUpdateTemperature> query = Wrappers.query();
        query.lambda().eq(HktsUpdateTemperature::getUpdateStatus,1);
        List<HktsUpdateTemperature> hktsUpdateTemperatures = hktsUpdateTemperatureMapper.selectList(query);
        Map<String, HktsUpdateTemperature> collect = hktsUpdateTemperatures.stream().collect(Collectors.toMap(HktsUpdateTemperature::getFlameSystem, Function.identity()));
        return collect;
    }

    /**
     * 公共查询条件
     *
     * @param entityWrapper
     * @return
     */
    public QueryWrapper<HktsUpdateTemperature> getEntityWrapper(QueryWrapper<HktsUpdateTemperature> entityWrapper, HktsUpdateTemperature hktsUpdateTemperature) {
        //条件拼接

        return entityWrapper;
    }
}
